LOADING...

加载过慢请开启缓存(浏览器默认开启)

loading

loop_order

2022/3/14

循环顺序错误导致的无效遍历

记录一下一个编程坏习惯导致的错误


c++要记录一段代码的运行时间很简单

clock_t start = clock();
//执行的代码
double t = (double)(clock() - start) / CLOCKS_PER_SEC;
std::cout << "code runtime:" << t << "s" << std::endl;

今天在跑代码的时候就发现有一段代码要运行很久

是一个两层循环,遍历次数也不多,不应该跑这么慢的

大致框架如下

for (auto a : A)
{
    for (auto b : B)
    {
        c = fun1(b);
        fun2(a, c);
    }
}

不仔细看的话,还真看不出有什么问题

后面才发现fun1经过了很多次无效循环

内外循环顺序应该颠倒过来

像下面这样子

for (auto b : B)
{
    c = fun1(b);
    for (auto a : A)
    {
        fun2(a, c);
    }
}

以往除了遍历图片像素会想一想内外循环的顺序,其他都是没怎么注意

以后遇到多层循环要留个心眼,最先用到的变量对应的循环应该考虑放最外面

当然上面只是一个例子,并不适用于所有情况